一、
1、设计模式的定义 :
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
2、设计模式的基本要素 :
设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面:
模式名称 (Pattern name)
问题 (Problem) :需要解决的问题以及一些前提条件。
解决方案 (Solution) :组成部分(类或对象)以及之间的相互关系,各自的职责和协作方式。
效果 (Consequences) :第二章面向对象的设计原则
3、设计模式的分类:
根据其目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种:
创建型模式主要用于创建对象。
结构型模式主要用于处理类或对象的组合。
行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。
根据范围,即模式主要是用于处理类之间关系还是处理对象之间的关系,可分为类模式和对象模式两种:
类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。
对象模式处理对象间的关系,这些关系在运行时刻变化,更具动态性。
4、设计模式的七个基本原则:
单一职责原则(Single Responsibility Principle, SRP)定义如下:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
开闭原则(Open-Closed Principle, OCP)定义如下:一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。
里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
依赖倒转原则(Dependence Inversion Principle, DIP)的定义如下:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
接口隔离原则(Interface Segregation Principle, ISP)的定义如下:客户端不应该依赖那些它不需要的接口。
合成复用原则(Composite Reuse Principle, CRP)又称为组合/聚合复用原则(Composition/ Aggregate Reuse Principle, CARP),其定义如下:尽量使用对象组合,而不是继承来达到复用的目的。
迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
范围\目的
创建型模式
结构型模式
行为型模式
类模式
工厂方法模式
(类)适配器模式1
解释器模式
模板方法模式
对象模式
抽象工厂模式(t)
建造者模式(t)
原型模式
单例模式
(对象)适配器模式
桥接模式(t)
组合模式(t)
装饰模式(c)
外观模式
享元模式
代理模式
职责链模式(c)
命令模式(c)
迭代器模式
中介者模式
备忘录模式
观察者模式(c)
状态模式
策略模式(t)
访问者模式
5
二、
1、创建型模式: 简单工厂模式(Simple Factory)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)
2、简单工厂模式:
(1)模式定义:
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method) 模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同 类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的 实例通常都具有共同的父类。
(2)动机:
考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆 形按钮、矩形按钮、菱形按钮等),这些按钮都源自同一个基类,不过在继承基类 后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在 使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的 一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按 钮对象,此时,就可以使用简单工厂模式。
(3)类图:
3、工厂方法模式:
(1)定义:
它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象 的 公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实 例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具 体产品类。
(2)动机:
在新增加一个具体产品类时,不修改工厂类的代码,而是将具体按钮的创建过程交 给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工 厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义 的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的 产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类 就可以获得该新按钮的实例,这一特点无疑使得工厂方法模式具有超越简单工厂模 式的优越性,更加符合“开闭原则”
(3)类图:
4、抽象工厂模式(重点复习类图)
(1)定义
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象 工厂模式又称为Kit模式。
(2)动机
当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不 同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。
抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。
抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等 级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负 责多个不同产品等级结构中的产品对象的创建 。当一个工厂等级结构可以创建出 分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法 模式更为简单、有效率。
(3)类图
模式结构:
(1)抽象工厂:抽象工厂用于